package cc.sunni.service;

import cc.sunni.entity.Student;

import java.util.List;
import java.util.Objects;

/**
 * 抽象的父类
 */
public abstract class AbsCheckStudent {
    /**
     * 包含有自身的一个属性，其作业主要是下一个对数据的处理者
     */
    protected AbsCheckStudent absCheckStudent;

    /**
     * 设定下一个处理者
     */
    public void setAbsCheckStudent(AbsCheckStudent absCheckStudent) {
        this.absCheckStudent = absCheckStudent;
    }

    /**
     * 此方法是业务层调用的方法，即业务调用此方法，把学生的集合做参数传进来即可。
     */
    public void handleCheck(List<Student> studentList) {
        if (Objects.nonNull(studentList) && !studentList.isEmpty()) {
            List<Student> checkIsOk = checkStudent(studentList);
            //判断下一个处理者是不是null，即还有没有下一个处理者，且判断数据是否为空
            if (Objects.nonNull(absCheckStudent) && Objects.nonNull(checkIsOk) && !checkIsOk.isEmpty()) {
                //调用下一个处理者的业务处理方法
                absCheckStudent.handleCheck(checkIsOk);
            }
        }
    }

    /**
     * 此方法是由不同的子类来进行不同的处理实现
     */
    public abstract List<Student> checkStudent(List<Student> studentList);
}